Which Operator to Use? - Instance Operators
Use this page to find the instance operator implemented by the Observable type that fits your needs:
| Using an existing sequence | I want to change each value | map/select | ||
| I want to pull a property off each value | pluck | |||
| I want to be notified of values without affecting them | do/tap doOnNext/tapOnNext doOnError/tapOnError doOnCompleted/tapOnCompleted |
|||
| I want to include values | based on custom logic | filter/where | ||
| from the start of the sequence | take | |||
| based on custom logic | takeWhile | |||
| from the end of the sequence | takeLast | |||
| until another sequence emits a value or completes | takeUntil | |||
| I want to ignore values | altogether | ignoreElements | ||
| from the start of the sequence | skip | |||
| based on custom logic | skipWhile | |||
| from the end of the sequence | skipLast | |||
| until another sequence emits a value | skipUntil | |||
| that have the same value as the previous | distinctUntilChanged | |||
| that occur too frequently | throttle | |||
| I want to compute | the sum | of its values | sum | |
| the average | average | |||
| using custom logic | and only output the final value | aggregate reduce |
||
| and output the values as they are calculated | scan | |||
| I want to wrap its messages with metadata | that describes each message | materialize | ||
| that includes the time past since the last value | timeInterval | |||
| that includes a timestamp | timestamp | |||
| after a period of inactivity | I want to throw an error | timeout | ||
| I want to switch to another sequence | timeout | |||
| I want ensure there is only one value | and throw an error if there are more or less than one value | single | ||
| and use the default value if there are no values | singleOrDefault | |||
| I want to only take the first value | and throw an error if there are no values | first | ||
| and use the default value if there are no values | firstOrDefault | |||
| within a time period | sample | |||
| I want to only take the last value | and error if there are no values | last | ||
| and use the default value if there are no values | lastOrDefault | |||
| I want to know how many values it contains | count | |||
| I want to know if it includes a value | contains | |||
| I want to know if a condition is satisfied | by any of its values | any/some | ||
| by all of its values | all/every | |||
| I want to delay messages by a specific amount of time | delay | |||
| based on custom logic | delayWithSelector | |||
| I want to group the values | until the sequence completes |
toArray toMap toSet |
||
| using custom logic | as arrays | buffer | ||
| as sequences | window | |||
| in batches of a particular size | as arrays | bufferWithCount | ||
| as sequences | windowWithCount | |||
| based on time | as arrays | bufferWithTime | ||
| as sequences | windowWithTime | |||
| based on time or count, whichever happens first | as arrays | bufferWithTimeOrCount | ||
| as sequences | windowWithTimeOrCount | |||
| based on a key | until the sequence completes | groupBy | ||
| and control the lifetime of each group | groupByUntil | |||
| I want to start a new sequence for each value | and emit the values from all sequences in parallel | flatMap/selectMany | ||
| and emit the values from each sequence in order | concatMap/selectConcat | |||
| and cancel the previous sequence when a new value arrives | flatMapLatest/selectSwitch | |||
| and recursively start a new sequence for each new value | expand | |||
| and emit values from all sequences depending for onNext, onError, and onCompleted in parallel | flatMapObserver/selectManyObserver | |||
| and emit values from all sequences depending for onNext, onError, and onCompleted in order | concatMapObserver/selectConcatObserver | |||
| I want to combine it with another | And be notified when both have completed | forkJoin | ||
| I want to perform complex operations without breaking the fluent calls | let | |||
| I want to share a subscription between multiple subscribers | using a specific subject implementation | multicast | ||
|
publish share |
||||
| and supply the last value to future subscribers |
publishLast shareLast |
|||
| and replay a default or the latest value to future subscribers |
publishValue shareValue |
|||
| and replay n number of values to future subscribers |
replay shareReplay |
|||
| when an error occurs | I want to re-subscribe | retry | ||
| I want to start a new sequence | catch | |||
| that depends on the error | catch | |||
| when it completes | I want to re-subscribe | repeat | ||
| I want to start a new sequence | concat | |||
| when it completes or errors | I want to start a new sequence | onErrorResumeNext | ||
| when it completes, errors or unsubscribes | I want to execute a function | finally | ||
| I want to change the scheduler that routes | calls to subscribe | subscribeOn | ||
| messages | observeOn | |||
| Using two sequences | I want to decide which to receive values from | based on which one has values first | amb | |
| I want to determine if their values are equal | sequenceEqual | |||
| I want to combine their values | only when the first sequence emits, using the latest value from each | withLatestFrom | ||
| in order | reusing the latest value when unchanged | combineLatest | ||
| using each value only once | zip | |||
| that share overlapping “lifetime” that I choose | and be notified for each combination | join | ||
| and be given a sequence of “rights” for each “left” | groupJoin | |||
| I want to include values from both | merge | |||
See Also
Reference
Concepts